package com.yida.gwj.expend.outside.domain.request;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.yida.gwj.expend.outside.service.BusinessRequestGroup;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 公维金资金申请业务信息新增Request
 *
 * @author wkz
 * @date 2023-02-28
 */

@ApiModel(description = "公维金资金申请业务信息请求参数")
public class GwjMaintenanceFundsBusinessAddRequest {
    private static final long serialVersionUID = 1L;
    /**
     * 关联基础小区ID
     */
    @ApiModelProperty(value = "关联基础小区ID")
    @NotNull(message = "小区ID不能为空")
    private Long communityId;

    /**
     * 业务标识（cate_id）
     */
    @NotNull(message = "业务标识不能为空", groups = {BusinessRequestGroup.class})
    @ApiModelProperty(name = "业务标识")
    private Long bizFlagId;

    /**
     * 业务ID(yw_id)
     */
    @ApiModelProperty(value = "业务ID(yw_id)")
    @NotNull(message = "业务ID（bizId）不能为空", groups = {BusinessRequestGroup.class})
    private Long bizId;

    @NotBlank(message = "小区名称不能为空")
    @ApiModelProperty(value = "小区名称(name)")
    private String communityName;

    /**
     * 业务步骤ID
     */
    @NotNull(message = "业务步骤ID不能为空", groups = {BusinessRequestGroup.class})
    @ApiModelProperty(value = "业务步骤ID")
    private Long stepId;

    @NotBlank(message = "申请单位不能为空")
    @ApiModelProperty(value = "申请单位全称(shenqingdanwei_quancheng)")
    private String applicationUnitName;

    @NotBlank(message = "联系人不能为空")
    @ApiModelProperty(value = "联系人(lianxiren)")
    private String contacts;

    @ApiModelProperty(value = "联系电话")
    @NotBlank(message = "联系电话不能为空")
    private String phone;

    @ApiModelProperty(value = "小区地址")
    @NotBlank(message = "小区地址不能为空")
    private String address;

    @ApiModelProperty(value = "业务名称")
    @NotBlank(message = "业务名称不能为空")
    private String bizName;

    @NotNull(message = "开发企业名称不能为空")
    @ApiModelProperty(value = "开发企业名称")
    private String developmentEnterpriseName;

    @NotNull(message = "项目竣工时间不能为空")
    @ApiModelProperty(value = "项目竣工时间(endtime)")
    private Date completedTime;

    /**
     * 有效时间(validdate)
     */
    @NotNull(message = "有效时间不能为空")
    @ApiModelProperty(value = "有效时间(validdate)")
    private Date validDate;

    /**
     * 维修项目(weixiuxiangmu)
     */
    @NotBlank(message = "维修项目不能为空")
    @ApiModelProperty(value = "维修项目(weixiuxiangmu)")
    private String maintenanceItems;

    /**
     * 维修原因(weixiuyuanyin)
     */
    @ApiModelProperty(value = "维修原因(weixiuyuanyin)")
    @NotBlank(message = "维修原因不能为空")
    private String maintenanceReason;

    /**
     * 申报日期(shenbaoriqi)
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @NotNull(message = "申报日期不能为空")
    @ApiModelProperty(value = "申报日期(shenbaoriqi)")
    private LocalDate declarationDate;

    /**
     * 工程预算金额(gongchengyusuanjine)
     */
    @ApiModelProperty(value = "工程预算金额(gongchengyusuanjine)")
    @NotNull(message = "工程预算金额不能为空")
    private BigDecimal projectBudgetAmount;

    /**
     * 拨款方式：默认为1一次拨付，2为二次拨付
     */
    @ApiModelProperty(value = "拨款方式：默认为1一次拨付，2为二次拨付")
    @NotNull(message = "拨款方式不能为空")
    private Integer appropriationWay;

    /**
     * 施工单位(shigongdanwei)
     */
    @ApiModelProperty(value = "施工单位(shigongdanwei)")
    @NotBlank(message = "施工单位不能为空")
    private String constructionUnit;

    /**
     * 验收方案(yanshoufangan)
     */
    @ApiModelProperty(value = "验收方案(yanshoufangan)")
    @NotBlank(message = "验收方案不能为空")
    private String acceptancePlan;

    /**
     * 开户银行(kaihuyinhang)
     */
    @ApiModelProperty(value = "开户银行(kaihuyinhang)")
    @NotBlank(message = "开户银行不能为空")
    private String bankDeposit;

    /**
     * 收款账号(shoukuanzhanghao)
     */
    @ApiModelProperty(value = "收款账号(shoukuanzhanghao)")
    @NotBlank(message = "收款账号不能为空")
    private String collectionAccount;

    /**
     * 收款单位全称(shoukuandanweiquancheng)
     */
    @ApiModelProperty(value = "收款单位全称(shoukuandanweiquancheng)")
    @NotBlank(message = "收款单位全称不能为空")
    private String payeeName;

    @ApiModelProperty(value = "业委名称(yewei_name)")
    // @NotBlank(message = "业委名称不能为空")//暂时去掉不做校验
    private String ownerCommitteeName;

    /**
     * 关联楼栋数据集合
     */
    @ApiModelProperty(value = "关联楼栋数据集合")
    @NotEmpty(message = "关联楼栋数据集合不能为空")
    private List<Build> builds;

    /**
     * 预算拨款金额(yusuanbochujine)
     */
    @ApiModelProperty(value = "预算拨出金额(yusuanbochujine)")
    @NotNull(message = "预算拨出金额不能为空")
    private BigDecimal budgetAppropriationAmount;

    @ApiModelProperty(value = "地区id")
    @NotNull(message = "地区id不能为空")
    private Long areaId;

    @ApiModelProperty(value = "类型 1:预受理 2:正式受理 3:旧系统4.拨付预受理 5拨付正式受理 6.应急资金申请预受理 7.应急资金申请正式受理 8.应急资金拨付预受理 9.应急资金拨付正式受理")
    private Integer type;

    @ApiModelProperty(value = "业务标识类型")
    private Integer businessFlagType;

    /**
     * 银行ID
     * 
     * 20230710
     * 
     */
    private Long bankId;

    public Integer getBusinessFlagType() {
        return businessFlagType;
    }

    public void setBusinessFlagType(Integer businessFlagType) {
        this.businessFlagType = businessFlagType;
    }

    public static class Build {

        Long buildId;

        String buildCode;

        public Long getBuildId() {
            return buildId;
        }

        public void setBuildId(Long buildId) {
            this.buildId = buildId;
        }

        public String getBuildCode() {
            return buildCode;
        }

        public void setBuildCode(String buildCode) {
            this.buildCode = buildCode;
        }
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Long getBizFlagId() {
        return bizFlagId;
    }

    public void setBizFlagId(Long bizFlagId) {
        this.bizFlagId = bizFlagId;
    }

    public String getDevelopmentEnterpriseName() {
        return developmentEnterpriseName;
    }

    public void setDevelopmentEnterpriseName(String developmentEnterpriseName) {
        this.developmentEnterpriseName = developmentEnterpriseName;
    }

    public Long getCommunityId() {
        return communityId;
    }

    public void setCommunityId(Long communityId) {
        this.communityId = communityId;
    }

    public String getCommunityName() {
        return communityName;
    }

    public void setCommunityName(String communityName) {
        this.communityName = communityName;
    }

    public String getContacts() {
        return contacts;
    }

    public void setContacts(String contacts) {
        this.contacts = contacts;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Date getCompletedTime() {
        return completedTime;
    }

    public void setCompletedTime(Date completedTime) {
        this.completedTime = completedTime;
    }

    public Date getValidDate() {
        return validDate;
    }

    public void setValidDate(Date validDate) {
        this.validDate = validDate;
    }

    public String getMaintenanceItems() {
        return maintenanceItems;
    }

    public void setMaintenanceItems(String maintenanceItems) {
        this.maintenanceItems = maintenanceItems;
    }

    public String getMaintenanceReason() {
        return maintenanceReason;
    }

    public void setMaintenanceReason(String maintenanceReason) {
        this.maintenanceReason = maintenanceReason;
    }

    public LocalDate getDeclarationDate() {
        return declarationDate;
    }

    public void setDeclarationDate(LocalDate declarationDate) {
        this.declarationDate = declarationDate;
    }

    public BigDecimal getProjectBudgetAmount() {
        return projectBudgetAmount;
    }

    public void setProjectBudgetAmount(BigDecimal projectBudgetAmount) {
        this.projectBudgetAmount = projectBudgetAmount;
    }

    public Integer getAppropriationWay() {
        return appropriationWay;
    }

    public void setAppropriationWay(Integer appropriationWay) {
        this.appropriationWay = appropriationWay;
    }

    public String getConstructionUnit() {
        return constructionUnit;
    }

    public void setConstructionUnit(String constructionUnit) {
        this.constructionUnit = constructionUnit;
    }

    public String getBankDeposit() {
        return bankDeposit;
    }

    public void setBankDeposit(String bankDeposit) {
        this.bankDeposit = bankDeposit;
    }

    public String getCollectionAccount() {
        return collectionAccount;
    }

    public void setCollectionAccount(String collectionAccount) {
        this.collectionAccount = collectionAccount;
    }

    public String getOwnerCommitteeName() {
        return ownerCommitteeName;
    }

    public void setOwnerCommitteeName(String ownerCommitteeName) {
        this.ownerCommitteeName = ownerCommitteeName;
    }

    public String getAcceptancePlan() {
        return acceptancePlan;
    }

    public void setAcceptancePlan(String acceptancePlan) {
        this.acceptancePlan = acceptancePlan;
    }

    public List<Build> getBuilds() {
        return builds;
    }

    public void setBuilds(List<Build> builds) {
        this.builds = builds;
    }

    public Long getBizId() {
        return bizId;
    }

    public void setBizId(Long bizId) {
        this.bizId = bizId;
    }

    public String getApplicationUnitName() {
        return applicationUnitName;
    }

    public void setApplicationUnitName(String applicationUnitName) {
        this.applicationUnitName = applicationUnitName;
    }

    public Long getStepId() {
        return stepId;
    }

    public void setStepId(Long stepId) {
        this.stepId = stepId;
    }

    public BigDecimal getBudgetAppropriationAmount() {
        return budgetAppropriationAmount;
    }

    public void setBudgetAppropriationAmount(BigDecimal budgetAppropriationAmount) {
        this.budgetAppropriationAmount = budgetAppropriationAmount;
    }

    public String getBizName() {
        return bizName;
    }

    public void setBizName(String bizName) {
        this.bizName = bizName;
    }

    public String getPayeeName() {
        return payeeName;
    }

    public void setPayeeName(String payeeName) {
        this.payeeName = payeeName;
    }

    public Long getAreaId() {
        return areaId;
    }

    public void setAreaId(Long areaId) {
        this.areaId = areaId;
    }

    public Long getBankId() {
        return bankId;
    }

    public void setBankId(Long bankId) {
        this.bankId = bankId;
    }

    @Override
    public String toString() {
        return "GwjMaintenanceFundsBusinessAddRequest{" + "communityId=" + communityId + ", bizFlagId=" + bizFlagId + ", bizId=" + bizId + ", communityName='" + communityName + '\'' + ", stepId=" + stepId + ", applicationUnitName='" + applicationUnitName + '\'' + ", contacts='" + contacts + '\'' + ", phone='" + phone + '\'' + ", address='" + address + '\'' + ", bizName='" + bizName + '\'' + ", developmentEnterpriseName='" + developmentEnterpriseName + '\'' + ", completedTime=" + completedTime
            + ", validDate=" + validDate + ", maintenanceItems='" + maintenanceItems + '\'' + ", maintenanceReason='" + maintenanceReason + '\'' + ", declarationDate=" + declarationDate + ", projectBudgetAmount=" + projectBudgetAmount + ", appropriationWay=" + appropriationWay + ", constructionUnit='" + constructionUnit + '\'' + ", acceptancePlan='" + acceptancePlan + '\'' + ", bankDeposit='" + bankDeposit + '\'' + ", collectionAccount='" + collectionAccount + '\'' + ", payeeName='" + payeeName
            + '\'' + ", ownerCommitteeName='" + ownerCommitteeName + '\'' + ", builds=" + builds + ", budgetAppropriationAmount=" + budgetAppropriationAmount + ", areaId=" + areaId + '}';
    }
}
